001 /* 002 * Copyright 2005 Stephen J. McConnell. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 013 * implied. 014 * 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 019 package net.dpml.state; 020 021 import java.io.Serializable; 022 023 /** 024 * Default implementation of an operation. 025 * 026 * @author <a href="http://www.dpml.net">Digital Product Meta Library</a> 027 * @version 1.0.1 028 */ 029 public class DefaultOperation implements Operation, Serializable 030 { 031 private final String m_name; 032 private final String m_method; 033 034 /** 035 * Creation of a new operation. 036 * @param name the operation name 037 * @exception NullPointerException if the operation name is null 038 */ 039 public DefaultOperation( final String name ) throws NullPointerException 040 { 041 this( name, null ); 042 } 043 044 /** 045 * Creation of a new operation. 046 * @param name the operation name 047 * @param method the overriding method name 048 * @exception NullPointerException if the operation name is null 049 */ 050 public DefaultOperation( final String name, String method ) throws NullPointerException 051 { 052 if( null == name ) 053 { 054 throw new NullPointerException( "name" ); 055 } 056 m_name = name; 057 m_method = method; 058 } 059 060 /** 061 * Return the action name. 062 * @return the name 063 */ 064 public String getName() 065 { 066 return m_name; 067 } 068 069 /** 070 * Return the optional overriding method name. If the 071 * value returned is null the method shall be assumed to be the 072 * equivalent of "get[Name](). 073 * @return the operation method name 074 */ 075 public String getMethodName() 076 { 077 return m_method; 078 } 079 080 /** 081 * Return a string representation of the instance. 082 * @return the string value 083 */ 084 public String toString() 085 { 086 return "operation:" + m_name; 087 } 088 089 /** 090 * Compare this object to another for equality. 091 * @param other the other object 092 * @return true if the object is equal to this object 093 */ 094 public boolean equals( Object other ) 095 { 096 if( null == other ) 097 { 098 return false; 099 } 100 else if( other instanceof DefaultOperation ) 101 { 102 DefaultOperation operation = (DefaultOperation) other; 103 104 if( !m_name.equals( operation.getName() ) ) 105 { 106 return false; 107 } 108 else if( null == m_method ) 109 { 110 return null == operation.m_method; 111 } 112 else 113 { 114 return m_method.equals( operation.m_method ); 115 } 116 } 117 else 118 { 119 return false; 120 } 121 } 122 123 /** 124 * Compute the hashcode for this instance. 125 * @return the hashcode value 126 */ 127 public int hashCode() 128 { 129 int hash = getClass().hashCode(); 130 hash ^= m_name.hashCode(); 131 if( null != m_method ) 132 { 133 hash ^= m_method.hashCode(); 134 } 135 return hash; 136 } 137 }